package tech.waterism.topo.model;

import lombok.Data;

import java.util.List;

/**
 * 输入分量
 * 
 * <p>表示节点的一个上游入流分量，包含入流类型、来源站码、流量数据等
 * 
 * @author waterism
 * @since 1.0.0
 */
@Data
public class InputComponent {
    
    /** 分量类型：D=河道直接, R=河道汇流, X=区间面积, RSVR=水库, STORE=蓄滞洪区 */
    private String artp;
    
    /** 来源站码（上游站点） */
    private String arcd;
    
    /** 分量站码（用于模型计算） */
    private String parcd;
    
    /** 流域编码（用于水文模型） */
    private String plcd;
    
    /** 时序数据列表 */
    private List<TimeSeriesData> data;
    
    /** 水文模型列表 */
    private List<ModelInfo> mdcdList;
    
    /** 取水口列表 */
    private List<IntakeInfo> intakes;
    
    /**
     * 判断是否为河道直接入流（D或R类型）
     */
    public boolean isDirectInflow() {
        return "D".equals(artp) || "R".equals(artp);
    }
    
    /**
     * 判断是否为区间面积入流
     */
    public boolean isAreaInflow() {
        return "X".equals(artp);
    }
    
    /**
     * 判断是否为水库入流
     */
    public boolean isReservoirInflow() {
        return "RSVR".equals(artp);
    }
    
    /**
     * 判断是否为蓄滞洪区入流
     */
    public boolean isStoreInflow() {
        return "STORE".equals(artp);
    }
    
    /**
     * 判断是否需要调用水文模型
     */
    public boolean hasModel() {
        return mdcdList != null && !mdcdList.isEmpty();
    }
    
    /**
     * 创建空的输入分量
     */
    public static InputComponent empty() {
        return new InputComponent();
    }
}

